Before a computing device may accomplish a desired task, it must receive an appropriate set of instructions. Executed by a device's processor(s), these instructions direct the operation of the device. These instructions can be stored in a memory of the computer. Instructions can invoke other instructions.
A computing device, such as a server, router, desktop computer, laptop, etc., and other devices having processor logic and memory, includes an operating system layer and an application layer to enable the device to perform various functions or roles. The operating system layer includes a “kernel”, i.e., master control program, that runs the computing device. The kernel provides task management, device management, and data management, among others.
The kernel sets the standards for application programs that run on the computing device and controls resources used by application programs. The application layer includes programs, i.e., executable instructions, which are located above the operating system layer and accessible by a user. As used herein, “user” space, or “user-mode” implies a layer of code which is less privileged and more directly accessible by users than the layer of code which is in the operating system layer or “kernel” space.
In software development, there can be many different groups of programmers working on different portions of software code that will later be compiled to create a finished program. A compiler is software that converts a set of high-level language statements (e.g., high level programming language such as C/C++, COBOL, etc.) into a lower-level representation. For example, compiler software translates a program written in a high-level programming language (C/C++, COBOL, etc.) into machine language. A compiler may generate assembly language first and then translate the assembly language into machine language. A utility known as a “linker” then combines all required machine language modules into an executable program that can run in the computer.
In an operating system parlance, the kernel is the set of modules forming the core of the operating system. The kernel is loaded into main memory first on startup of a computer and remains in main memory providing services such as memory management, process and task management, and disk management. The kernel also handles such issues as startup and initialization of the computer system. Logically, a kernel configuration is a collection of all the administrator choices and settings needed to determine the behavior and capabilities of the kernel. This collection includes a set of kernel modules (each with a desired state), a set of kernel tunable parameter value assignments, a primary swap device, a set of dump device specifications, a set of bindings of devices to other device drivers, a name and optional description of the kernel configuration, etc.
The process of configuring an operating system kernel, i.e., kernel configuration, has some possibility for error, potentially leaving a system unusable. There are various techniques to mitigate this danger. The most common of these techniques is the creation of backups of the kernel configuration before changing it, and restoring those backups if the configuration change proves undesirable. This technique is adequate in most cases, but if the ill effects of the configuration change are significant, the backup can be damaged, or damage can be done to parts of the system not normally backed up.
System administrators have an understandable nervousness about making configuration changes on a live production system, e.g., one on which many users are depending. System upgrades and brand new installs can both present these issues.
Additional issues in configuring an operating system kernel include the incorrect use of kernel configuration tools which could result in no working bootable configuration, manual manipulation of kernel configurations based on familiarity with earlier versions or different supplier's products, post boot changes, etc. In some cases a system administrator may forget to make backups, fail to properly keep track of backups, and/or fail to make complete backup copies of kernel configurations, e.g., all of the relevant files may not be included in the backup.